package main

import (
	"fmt"
)

func NewUser() {
	//初始化结构体
	//u := User{}
	//fmt.Printf("%v \n", u)
	//fmt.Printf("%#v \n", u)
	//up 是一个指针
	up := &User{}
	fmt.Printf("%+v \n", up)

	u4 := User{Name: "tom", Age: 0}
	fmt.Printf("%+v \n", u4)
	u5 := User{"aaa", 1} //这种写法一定不要使用
	fmt.Printf("%+v \n", u5)

	var up3 *User
	fmt.Printf("%+v \n", up3)

}

type User struct {
	Name string
	Age  int
}

func (u User) ChangName(name string) {
	fmt.Printf("%+v \n", &u)
	u.Name = name

}

func (u *User) ChangeAge(age int) {
	fmt.Printf("%+v \n", u)
	u.Age = age

}
func ChangeAge(u *User, age int) {

}
func ChangUser() {
	u1 := User{Name: "tom", Age: 0}

	u1.ChangName("tom")
	//执行这一步其实是相当于复制了一个u1，改的是复制体
	u1.ChangeAge(12)
	fmt.Printf("%+v \n", u1)
}

type Integer int

func UserInt() {
	s1 := Integer(34)
	s2 := int(33)
	println(s1, s2)
}

type Fish struct {
	name string
}

func (f Fish) Swim() {
	println("fist 在游")
}

type FakeFish Fish

func UserFish() {
	f1 := Fish{}
	f2 := FakeFish(f1)
	//衍生类型无法调用之前的方法，字段是可以调用的
	println(f2)
	//var y Yu
}

//一般使用与第三方库
//type MyTime time.Time
//
//func(m MyTime) MyFucn() {
//
//}

// 向后兼容
type Yu = Fish
